<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>01_太阳系的动画效果</title>
  <style>
    body{
      margin: 0;
      padding: 0;
      background-image: url(../../images/grid.png);
    }
    canvas{
      background-color: rgba(255, 0, 0, 0.1);
    }
  </style>
  </head>
  <body>
  
  <canvas id="tutorial" width="300" height="300px">
    你的浏览器不兼容Canvas,请升级您的浏览器!
  </canvas>
  <script>
    window.onload = function(){
      // 1. 获取canvas元素
      var canvas = document.getElementById('tutorial');
      // 2. 获取绘图上下文
      var ctx = canvas.getContext('2d');
  
      let sun = new Image();
      sun.src = '../../images/canvas_sun.png';
      let earth = new Image();
      earth.src = '../../images/canvas_earth.png';
      let moon = new Image();
      moon.src = '../../images/canvas_moon.png';

      requestAnimationFrame(draw)
      function draw() {
        ctx.clearRect(0, 0, 300, 300); // 清除画布
        ctx.save(); // 保存当前画布状态
        let time = new Date()
        let second = time.getSeconds()
        let milliseconds = time.getMilliseconds()
        sunDraw() // 绘制太阳
        earthDraw(second, milliseconds) // 绘制地球
        moomDraw(second, milliseconds) // 绘制月球
        ctx.restore() // earth end
        requestAnimationFrame(draw)
      }

      function sunDraw() {
        // 1. 绘制背景
        ctx.save()
        ctx.drawImage(sun, 0, 0) // 绘制太阳
        ctx.translate(150, 150) // 设置太阳的位置
        ctx.strokeStyle = 'rgba(0, 153, 255, 0.4)'
        ctx.beginPath() // 开始路径
        ctx.arc(0, 0, 105, 0, Math.PI * 2, false) // 绘制圆
        ctx.stroke() // 描边
        ctx.restore() // 恢复之前保存的画布状态
      }

      function earthDraw(second, milliseconds) {
        // 2. 绘制地球
        ctx.save() // 保存当前画布状态
        ctx.translate(150, 150) // 设置地球的位置
        // 地球的旋转
        // Math.PI * 2  一整个圆的弧度
        // Math.PI * 2 / 60   分成 60 份
        // Math.PI * 2 / 60   1s
        // Math.PI * 2 / 60 / 1000    1mm

        // 1s 1mm
        // Math.PI * 2 / 60 * second + Math.PI * 2 / 60 / 1000 * milliseconds
        ctx.rotate(
          Math.PI * 2 / 60 * second + 
          Math.PI * 2 / 60 / 1000 * milliseconds
        )
        ctx.translate(105, 0) // 设置地球的位置
        ctx.drawImage(earth, -12, -12) // 绘制地球
      }

      function moomDraw(second, milliseconds) {
        // 3. 绘制月球
        ctx.save() // 保存当前画布状态
        // 月球的旋转
        // Math.PI * 2   一圈   360
        // Math.PI * 2 / 10  1s(10s一圈)
        // Math.PI * 2 / 10 * 2  2s(10s一圈)
        // Math.PI * 2 / 10 / 1000  1mm 的弧度

        // 2s + 10mm = 弧度
        //  Math.PI * 2 / 10  * second + Math.PI * 2 / 10 / 1000 * milliseconds
        ctx.rotate(
          Math.PI * 2 / 10 * second +
          Math.PI * 2 / 10 / 1000 * milliseconds
        )
        ctx.translate(0, 28) // 设置月球的位置
        ctx.drawImage(moon, -3.5, -3.5) // 绘制月球
        ctx.restore() // 恢复之前保存的画布状态
        // 绘制地球的蒙版
        // 这里的坐标系是哪个? 圆上的坐标系
        ctx.save()
        ctx.fillStyle = 'rgba(0, 0, 0, 0.4)'
        ctx.fillRect(0, -12, 40, 24) // x, y, width, height
        ctx.restore() // moon end
      }
    }
  </script>
</body>
</html>